package com.powernode.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.powernode.constant.ProdTagConstant;
import com.powernode.domain.ProdTag;
import com.powernode.mapper.ProdTagMapper;
import com.powernode.service.ProdTagService;
import com.powernode.utils.AuthUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.List;

/**
 * 内容:
 * 作者: cy
 */
@Service
@Slf4j
@CacheConfig(cacheNames = "com.powernode.service.impl.ProdTagServiceImpl")
public class ProdTagServiceImpl extends ServiceImpl<ProdTagMapper, ProdTag> implements ProdTagService {


    @Autowired
    private ProdTagMapper prodTagMapper;

    /**
     * 分页查询标签分组
     * 标签 可以是整个商场的业务 也可以是给店家的业务
     *
     * @param page
     * @param prodTag
     * @return
     */
    @Override
    public Page<ProdTag> selectProdTagPage(Page<ProdTag> page, ProdTag prodTag) {
        Long shopId = AuthUtil.getUserIdOrShopId(false);
        return prodTagMapper.selectPage(page, new LambdaQueryWrapper<ProdTag>()
                //  <if     where status = 1
                .in(ProdTag::getShopId, 1L, shopId)
                .eq(ObjectUtils.isEmpty(prodTag.getStatus()), ProdTag::getStatus, prodTag.getStatus())
                .like(StringUtils.hasText(prodTag.getTitle()), ProdTag::getTitle, prodTag.getTitle())
        );
    }


    /**
     * 新增标签分组
     * 店铺可以搞标签
     *
     * @param prodTag
     * @return
     */
    @Override
    @Caching(
            evict = {
                    @CacheEvict(key = ProdTagConstant.PROD_TAG_PREFIX),
                    @CacheEvict(key = ProdTagConstant.PROD_TAG_FRONT_PREFIX),
            }
    )
    public void saveProdTag(ProdTag prodTag) {
        Long userId = AuthUtil.getUserIdOrShopId(true);
        log.info("新增标签分组{},用户id为{},店铺id为{}", JSON.toJSONString(prodTag), userId, prodTag.getShopId());
        prodTag.setCreateTime(new Date());
        prodTag.setUpdateTime(new Date());
        prodTag.setIsDefault(prodTag.getShopId() == 1L);
        prodTagMapper.insert(prodTag);
    }


    /**
     * 查询所有的标签分组
     * 给店铺的标签加缓存
     *
     * @return
     */
    @Override
    @Cacheable(key = ProdTagConstant.PROD_TAG_PREFIX)
    public List<ProdTag> selectAllProdTag(Long shopId) {
        // shopId = 1 是超级管理员
        return prodTagMapper.selectList(new LambdaQueryWrapper<ProdTag>()
                .in(ProdTag::getShopId, 1L, shopId)
                .eq(ProdTag::getStatus, 1)
                .orderByDesc(ProdTag::getSeq)
        );
    }


    /**
     * 查询前台标签分组
     *
     * @return
     */
    @Override
    @Cacheable(key = ProdTagConstant.PROD_TAG_FRONT_PREFIX)
    public List<ProdTag> selectFrontProdTag() {
        return prodTagMapper.selectList(new LambdaQueryWrapper<ProdTag>()
                .select(ProdTag::getId, ProdTag::getTitle, ProdTag::getStyle)
                .eq(ProdTag::getStatus, 1)
                .orderByDesc(ProdTag::getSeq)
        );
    }
}
